/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.manager.criar;

import br.com.foxinline.enums.Nacionalidade;
import br.com.foxinline.enums.TipoProfissional;
import br.com.foxinline.modelo.*;
import br.com.foxinline.servico.*;
import br.com.foxinline.utilitario.Caracter;
import br.com.foxinline.utilitario.Msg;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

/**
 *
 * @author ely
 */
@ManagedBean
@ViewScoped
public class ManagerCriarProfissional {

    @EJB
    ProfissionalServico profissionalServico;
    @EJB
    EnderecoServico enderecoServico;
    @EJB
    BairroServico bairroServico;
    @EJB
    MicroAreaServico microAreaServico;
    
    private Profissional profissional;
    private boolean disableEnderecoImovel;
    private boolean mensagemCep;

    @PostConstruct
    public void init() {
        profissional = new Profissional();
        profissional.setEndereco(new Endereco());
        profissional.getEndereco().setBairro(new Bairro());
        profissional.setMicroArea(new MicroArea());
        mensagemCep = false;
        

    }

    public List<SelectItem> tipoProfissional() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (TipoProfissional tipo : TipoProfissional.values()) {
            items.add(new SelectItem(tipo, tipo.getName()));
        }
        return items;
    }

    public List<SelectItem> nacionalidade() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (Nacionalidade tipo : Nacionalidade.values()) {
            items.add(new SelectItem(tipo, tipo.getNome()));
        }
        return items;
    }

     public List<MicroArea> todasMicroArea() {
        return microAreaServico.pesquisarTodos();
    }
    
    public void salvar() {
        Bairro bairro;
        try {  
            profissional.setCpf(Caracter.removecaracter(profissional.getCpf()));
            profissional.getEndereco().setCep(Caracter.removecaracter(profissional.getEndereco().getCep()));

            bairro = bairroServico.findBairro(profissional.getEndereco().getBairro().getNome());
            if (bairro.getId() == null) {
                bairroServico.salvar(profissional.getEndereco().getBairro());
                profissional.getEndereco().setBairro(bairro);
            } else {
                profissional.getEndereco().setBairro(bairro);
            }
           
            if(profissional.getTipoProfissional() != TipoProfissional.AGENTE_SAUDE){
                profissional.setMicroArea(null);
            }
            
            profissionalServico.salvar(profissional);
            Msg.messagemInfo(Msg.SuccessFull);
            init();

        } catch (Exception erro) {
            erro.printStackTrace();
            Msg.messagemError(Msg.Failure);
        }
    }

    public void existeEndereco() {
        Endereco endereco;

        endereco = enderecoServico.existCep(profissional.getEndereco());

        if (endereco != null) {
            profissional.setEndereco(endereco);
            disableEnderecoImovel = true;
            mensagemCep = false;
        } else {
            mensagemCep = true;
            disableEnderecoImovel = false;
        }
    }

    public Profissional getProfissional() {
        return profissional;
    }

    public void setProfissional(Profissional profissional) {
        this.profissional = profissional;
    }

    public boolean isDisableEnderecoImovel() {
        return disableEnderecoImovel;
    }

    public void setDisableEnderecoImovel(boolean disableEnderecoImovel) {
        this.disableEnderecoImovel = disableEnderecoImovel;
    }

    public boolean isMensagemCep() {
        return mensagemCep;
    }

    public void setMensagemCep(boolean mensagemCep) {
        this.mensagemCep = mensagemCep;
    }
}
